package com.usian.util.work;

import com.rabbitmq.client.*;
import com.usian.util.ConnectionUtil;

import java.io.IOException;

public class Recv2 {
    public static void main(String[] args) throws Exception {
        // 获取到连接
        Connection connection = ConnectionUtil.getConnection();
        // 创建通道
        Channel channel = connection.createChannel();
        // 声明队列
        channel.queueDeclare("rabbitmq-work_queue", false, false, false, null);
        //声明每个消费者同时只能处一条数据
        channel.basicQos(1);
        // 定义队列的消费者
        DefaultConsumer consumer = new DefaultConsumer(channel) {
            // 获取消息，并且处理，这个方法类似事件监听，如果有消息的时候，会被自动调用
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body) throws IOException {
                // body 即消息体
                String msg = new String(body);
                System.out.println("2"+msg + "!");
                /**
                 * 手动进行ACK
                 *  deliveryTag：该消息的index
                 *  multiple：是否批量处理.true:将一次性ack所有小于deliveryTag的消息。
                 */
                channel.basicAck(envelope.getDeliveryTag(), false);
            }
        };
        // 监听队列，第二个参数：是否自动进行消息确认。
        channel.basicConsume("rabbitmq-work_queue", false, consumer);

    }
}
